// 🎯 S5 策略：策略融合投票（Voting Fusion）
// 将多个策略的预测结果进行融合，通过投票方式选出最终预测的号码

const _ = require("lodash");

/**
 * S5 策略：融合多个策略结果进行投票选择
 * @param {Array<Array<string>>} strategyResults - 每个策略返回的号码数组
 * @returns {Array<string>} - 32 个最终选出的号码（字符串格式）
 */
function select32ByS5(strategyResults) {
  // 每个策略的预测结果，使用投票方式选出最多的号码
  const voteMap = {};

  strategyResults.forEach((result) => {
    result.forEach((num) => {
      voteMap[num] = (voteMap[num] || 0) + 1;
    });
  });

  // 按照投票次数排序，取前 32 个
  const sortedByVotes = Object.entries(voteMap)
    .sort((a, b) => b[1] - a[1]) // 按照投票次数降序
    .map(([num]) => num);

  // 最终返回前 32 个号码
  return sortedByVotes.slice(0, 32);
}

module.exports = select32ByS5;
